#ifndef GAMEROOM_H
#define GAMEROOM_H

#include <QWidget>
#include <QMessageBox>
#include <QTimer>
#include <QPen>
#include <QSound>
#include <QRectF>
#include <qDebug>

#include "gameselect.h"

enum class SnakeDirect{
    UP = 0,
    DOWN,
    LEFT,
    RIGHT
};

enum class GameStyle{
    SIMPLE = 0,
    NORMAL,
    COMPLEX
};


class Gameroom : public QWidget
{
    Q_OBJECT
public:
    explicit Gameroom(QWidget *parent = nullptr);

    // 重写绘图对象
    void paintEvent(QPaintEvent *event);

    // 游戏难度
    void styleGameRoom(GameStyle style)
    {
        styleRoom = style;
    }

    // 移动速度
    void snakeTimeout(int timeout)
    {
        moveTimeout = timeout;
    }

    //创建食物
    void createNewFood();

    // 判断游戏失败
    bool checkFail();

    // 移动方向
    void moveUp();
    void moveDown();
    void moveLeft();
    void moveRight();



private:
    // 蛇属性
    const int ksnakeNodeWidth = 20;
    const int ksnakeNodeHeight = 20;

    // 蛇的速度
    const int kDefaultTimeout = 300;
    int moveTimeout = kDefaultTimeout;

    // 蛇链表
    QList<QRectF> snakeList;

    // 食物
    QRectF foodNode;

    // 定时器
    QTimer *timer;

    // 游戏是否开始
    bool isGameStart = false;

    // 移动方向
    SnakeDirect moveDirect = SnakeDirect::UP;

    // 游戏难度
    GameStyle styleRoom = GameStyle::NORMAL;

    QSound *sound;
};

#endif // GAMEROOM_H
